<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Javascript</title>
</head>
<body>
    <pre>
        JavaScript：是一种基于对象和事件驱动的脚本语言
            基于对象：支持面向对象编程思想
            事件驱动：js代码本身不会自己执行，需要事件触发
            脚本语言：编译和运行不会生成多余文件

        JavaScript特点：
            交互、脚本语言、解释性语言[边执行边解释]
            注意：
                js代码可以被拆分成多块。编译时还是会整合编译。
                运行时，从上往下解析js代码，再运行
        
        关于JS和HTML的关系：
            编译时(将内容加载到浏览器内存中)，html和js优先级一样，谁在前(标准文档流之前)谁先加载        
            运行时，js优先级高于html

        javascript的组成：
            ECMAScript：基础和核心，规定语法结构。 简称es5
            BOM：浏览器对象模型
            DOM：文档对象模型
        
        html中引入JS的方式：
            方式一：在script标签中写js代码
                注意：凡是直接写在script标签中的js逻辑代码，都是默认触发页面加载事件onload
            方式二：在网页标签中直接写js代码[需要指明触发的事件，通过事件名属性添加]
            方式三：使用外部js文件
                注意：在外部js文件中直接写js代码，不能写html(不要添加script标签以及事件属性)
                     默认触发页面加载事件onload
    
        ECMAScript：
        (1) 变量
                在内存中分配的一个空间     
                语法：
                     //声明
                     关键字 变量名;  
                     //赋值
                     变量名 = 值;
                     //综合两步：
                     关键字 变量名 = 值;

                关键字包括：
                     var   定义全局显式变量   [整个js文件中都能使用，不能被删除，提升变量作用(由块级提升到全局)]
                     空缺  定义全局隐式变量    [整个js文件声明赋值之后都能使用，能被删除的]
                     
                变量名：建议使用英文字母，数字、下划线、美元符号等，数字不要是第一位
                        驼峰命名法：第一个单词首字母小写，第二单词和之后的都首字母大写 myName
                        见名知意
                变量的使用：
                    强制建议：先声明、再赋值、再使用
                    直接使用变量名代替变量值操作。
                    任何时候变量名的使用都不需要引号引起来。
                    全局变量在js的任何位置都能使用，但是赋值的变量值只能在声明赋值之后使用
                
                变量作用域：
                    指变量的使用范围。
                    从声明并赋值到js的末尾
                作用域：
                    全局作用域  整个js都能使用
                    块级作用域  在除函数以外的任意{}内可使用
                    局部作用域  在函数内使用
                ★注意：
                    变量没有类型，有类型的数据
        (2)数据类型
                undefined  声明未赋值
                null       声明并赋空值
                number     整数和小数
                boolean    true/false
                string     字符串 '' ""
                object     对象类型[函数类型等]
                注意：
                    JS规定：undefined和null做等值比较时，是相等的。
                    ===做判断时，如果类型不一致就直接返回false
                    ==会先尝试转型，再判断内容。
                    非空校验：如果变量有值、1，if判断的结果是true
                             如果变量是undefined、null、''、0, if判断的结果是false
        (3)typeof
            语法：typeof(变量)
        (4)运算符
              赋值运算符  =
              算数运算符  +  -  *  /  %
                  注意：如果+两边都是数值类型，+作为算术运算符使用
                        如果+任一边是字符串类型，+作为连接符使用
              自增自减运算符  ++  --   任何情况下自己+1或-1
              复合赋值运算符  +=  -=  *=  /=   %=
              自增自减运算符结合赋值运算符   = 变量++
              关系(比较)运算符  >  <  >=  <=  ==  !=  === 比较结果是布尔类型
              逻辑运算符   &&    ||   !
                    ！取反只会取离他最近的一个表达式[符号和操作数的组合]
              优先级：高 -> 低
                    () --> ! --> *  /  % --> +  - --> 关系运算符 --> && --> || --> =
        (5)注释
             js中解释说明的内容，不被编译器识别运行
             //     单行注释
             /* */  多行注释
        (6)输出语句
             往页面中以弹框方式显示：alert(内容)
             往页面中以文本方式显示：document.write(内容)
             往控制台输出：console.log(内容)
        (7)输入语句
             p r o m p t('提示内容','文本框中的默认文字')
             返回的结果是字符串类型。算数运算时需要转型
        (8)转型函数
             parseInt(字符串)
             parseFloat(字符串)
             建议在使用算术运算符时做类型转换，不建议在定义变量赋值时就转换
    </pre>
    <p id="p1" onclick="javascript:alert(2)" >这是个段落</p>
    

    <!-- 方式三：script引入外部js文件 -->
    <script type="text/javascript" src="js/chapter1.js" ></script>
    <!-- 方式一：在script标签中写js -->
    <script type="text/javascript">
        //alert(document.getElementById("p1").innerText);
        //alert(1);
    </script>
    
</body>
</html>